package com.bestcem.xm.ticket.mq;//package com.bestcem.xm.ticket.mq;
//
//import com.bestcem.xm.award.util.mq.RabbitMqMessageSender;
//import com.bestcem.xm.config.RabbitMqConstantConfig;
//import com.bestcem.xm.ticket.service.dto.mq.FollowOverdueDTO;
//import com.bestcem.xm.ticket.service.dto.mq.TicketSendDTO;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.stereotype.Component;
//import org.springframework.util.ObjectUtils;
//
//import javax.annotation.Nonnull;
//import javax.annotation.Resource;
//import java.util.Date;
//import java.util.concurrent.TimeUnit;
//
///**
// * 工单延迟队列MQ发送
// *
// * @author XiaoYunSong <ys.xiao@idiaoyan.com>
// * @version v1.0
// * @date 2021/9/16 14:42
// */
//@Slf4j
//@Component
//public class TicketDelayMqSender {
//
//    public static final String TICKET_TICKET_OVERDUE_TOPIC = "ticket.ticket_overdue";
//
//    public static final String TICKET_SEND_NOTIFY_TOPIC = "ticket.send_notify";
//
//    @Resource
//    private RabbitMqMessageSender rabbitMqMessageSender;
//
//    @Autowired
//    private RedisTemplate<String, String> redisTemplate;
//
//    @Autowired
//    private RabbitMqConstantConfig rabbitMqConstantConfig;
//
//    /**
//     * 计算周期行任务通知 发送提醒消息 延时MQ
//     *
//     * @param data      发送数据
//     * @param delayDate 延迟消息消费时间
//     * @param msg       报错信息
//     * @author XiaoYunSong <ys.xiao@idiaoyan.com>
//     * @date 2021/9/16 14:36
//     */
//    public void sendNotifyDelayMq(TicketSendDTO data, Date delayDate, @Nonnull String msg) {
//        String lockKey = "ticket:notification:" + msg;
//        if (log.isInfoEnabled()) {
//            log.info("[Ticket] 计算周期行任务通知 {} 发送提醒消息延时MQ; {},{}", msg, data, delayDate);
//        }
//        try {
//            if (ObjectUtils.isEmpty(msg)) {
//                log.error("[Ticket] 计算周期行任务通知延迟消息 msg 为空");
//            }
//            // redis 实现幂等处理
//            /*String lock = redisTemplate.opsForValue().get(lockKey);
//            if (!ObjectUtils.isEmpty(lock)) {
//                log.error("[Ticket] 计算周期行任务通知 {} 延迟消息今日重复发送", msg);
//                return;
//            }
//            redisTemplate.opsForValue().set(lockKey, lockKey, 23, TimeUnit.HOURS);*/
//            // 发送MQ
//            rabbitMqMessageSender.sendDelayMsg(rabbitMqConstantConfig.getAppBpTicketDelayExchange(), rabbitMqConstantConfig.getAppBpTicketDelayRoutingKey(),
//                    TICKET_SEND_NOTIFY_TOPIC, data, delayDate);
//        } catch (Exception e) {
//            log.error("[Ticket] 计算周期行任务通知 {} 延迟消息发送失败; {},{}", msg, data, delayDate, e);
//        }
//    }
//
//    /**
//     * 工单流转 发送提醒消息 延时MQ
//     *
//     * @param data      发送数据
//     * @param delayDate 延迟消息消费时间
//     * @param msg       报错信息
//     * @author XiaoYunSong <ys.xiao@idiaoyan.com>
//     * @date 2021/9/16 14:36
//     */
//    public void sendOverdueDelayMq(FollowOverdueDTO data, Date delayDate, String msg) {
//        if (log.isInfoEnabled()) {
//            log.info("[Ticket] 工单流转 {} 发送提醒消息延时MQ; {},{}", msg, data, delayDate);
//        }
//        try {
//            rabbitMqMessageSender.sendDelayMsg(rabbitMqConstantConfig.getAppBpTicketDelayExchange(), rabbitMqConstantConfig.getAppBpTicketDelayRoutingKey(),
//                    TICKET_TICKET_OVERDUE_TOPIC, data, delayDate);
//        } catch (Exception e) {
//            log.error("[Ticket] 工单流转 {} 延迟消息发送失败; {},{}", msg, data, delayDate, e);
//        }
//    }
//}
